home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / UTIL / SYS / STARTUP / s / startup next >
Text File  |  1992-01-26  |  7KB  |  350 lines

  1.                 AREA |main|,CODE,DATA
  2.                 KEEP
  3.  
  4.                 GET %.SwiDefs
  5.  
  6.                 GBLS version
  7. version         SETS "0.04"
  8. debug           * 0
  9.  
  10.                 [ debug<>0
  11. version         SETS "$version":CC:" (debug)"
  12.                 ]
  13.  
  14.  
  15.          ENTRY
  16. start
  17.           ShowStr 16,"StartUp ($version)"
  18.  
  19.          ADRL sp,stack
  20.  
  21.          SWI OS_GetEnv
  22.          ADRL r2,os_cmd
  23.  
  24. cli_skip
  25.          LDRB r1,[r0]
  26.          CMP r1,#32
  27.          BCC cli_args
  28.          CMP r1,#'-'
  29.          ADDNE r0,r0,#1
  30.          BNE cli_skip
  31.  
  32. cli_args
  33.          LDRB r1,[r0],#1
  34.          CMP r1,#32
  35.          MOVCC r1,#13
  36.          STRB r1,[r2],#1
  37.          CMP r1,#13
  38.          BNE cli_args
  39.  
  40.          ADRL r0,os_template
  41.          ADRL r1,os_cmd
  42.          ADRL r2,os_params
  43.          MOV r3,#&100
  44.          SWI OS_ReadArgs
  45.  
  46.          LDR r1,os_params+16
  47.          CMP r1,#0
  48.          LDRNEB r0,[r1,#1]
  49.          LDRNEB r2,[r1,#2]
  50.          ORRNE r0,r0,r2,ASL #8
  51.          LDRNEB r2,[r1,#3]
  52.          ORRNE r0,r0,r2,ASL #16
  53.          LDRNEB r2,[r1,#4]
  54.          ORRNE r1,r0,r2,ASL #24
  55.          STRNE r1,cmdtime
  56.  
  57.          LDR r1,os_params+4
  58.          CMP r1,#0
  59.          LDRNEB r0,[r1,#1]
  60.          LDRNEB r2,[r1,#2]
  61.          ORRNE r0,r0,r2,ASL #8
  62.          LDRNEB r2,[r1,#3]
  63.          ORRNE r0,r0,r2,ASL #16
  64.          LDRNEB r2,[r1,#4]
  65.          ORRNE r1,r0,r2,ASL #24
  66.          STRNE r1,pause
  67.  
  68.          LDR r1,os_params+8
  69.          CMP r1,#0
  70.          LDRNEB r0,[r1,#1]
  71.          LDRNEB r2,[r1,#2]
  72.          ORRNE r0,r0,r2,ASL #8
  73.          LDRNEB r2,[r1,#3]
  74.          ORRNE r0,r0,r2,ASL #16
  75.          LDRNEB r2,[r1,#4]
  76.          ORRNE r1,r0,r2,ASL #24
  77.          CMP r1,#0
  78.          STRNE r1,perpoll
  79.  
  80.          LDR r1,os_params
  81.          CMP r1,#0
  82.          LDRNEB r2,[r1]
  83.          LDRNEB r0,[r1,#1]
  84.          ORRNES r2,r2,r0,ASL #8
  85.          BEQ shutdown
  86.          LDRB r4,[r1,#2]!
  87.          CMP r4,#'+'
  88.          BNE not_file
  89.          ADD r1,r1,#1
  90.          SUBS r2,r2,#1
  91.          BEQ shutdown
  92.  
  93. not_file
  94.          ADRL r3,oscmd
  95.  
  96. get_fsp
  97.          LDRB r0,[r1],#1
  98.          STRB r0,[r3],#1
  99.          SUBS r2,r2,#1
  100.          BNE get_fsp
  101.          MOV r0,#13
  102.          STRB r0,[r3]
  103.  
  104.          CMP r4,#'+'
  105.          BNE not_file2
  106.          ADRL r1,oscmd
  107.          LDR r0,os_params+24
  108.          CMP r0,#0
  109.          BNE file_load
  110.          MOV r0,#&40
  111.          SWI OS_Find
  112.          STR r0,chan
  113.          CMP r0,#0
  114.          BNE not_file2
  115.          B shutdown
  116.  
  117.  
  118. file_load
  119.          MOV r0,#5
  120.          SWI OS_File
  121.  
  122.          ADRL r10,end
  123.          STR r10,cache_ptr
  124.          ADD r10,r10,r4
  125.          STR r10,cache_end
  126.          ADRL r0,start
  127.          SUB r0,r10,r0
  128.          MOV r1,#-1
  129.          SWI Wimp_SlotSize
  130.  
  131.          MOV r0,#&FF
  132.          ADRL r1,oscmd
  133.          ADRL r2,end
  134.          MOV r3,#0
  135.          SWI OS_File
  136.          B not_file3
  137.  
  138.  
  139. not_file2
  140.          ADRL r0,start
  141.          ADRL r10,end
  142.          SUB r0,r10,r0
  143.          MOV r1,#-1
  144.          SWI Wimp_SlotSize
  145.  
  146. not_file3
  147.          LDR r0,pause
  148.          ADRL r1,task_block2
  149.          MOV r2,#11
  150.          SWI OS_ConvertCardinal4
  151.  
  152.  
  153.          MOV r0,#200                            ; Sigh
  154.          ADRL r1,task_id
  155.          LDR r1,[r1]
  156.          ADRL r2,task_block
  157.          SWI Wimp_Initialise
  158.          STR r1,task_handle
  159.           ShowStr 18,"Task Handle"
  160.           Show 1,2,Hex
  161.  
  162. wimp_loop
  163.          ADRL r1,task_block
  164.  
  165.          LDR r3,pause
  166.          CMP r3,#0
  167.  
  168.          MOVEQ r0,#0
  169.          SWIEQ Wimp_Poll
  170.  
  171.          SWINE OS_ReadMonotonicTime
  172.          ADDNE r2,r0,r3
  173.          MOVNE r0,#0
  174.          SWINE Wimp_PollIdle
  175.  
  176.          CMP r0,#17
  177.          CMPNE r0,#18
  178.          BEQ wimp_msg
  179.          CMP r0,#0
  180.          BNE wimp_loop
  181.  
  182.  
  183.          LDR r0,os_params+24
  184.          CMP r0,#0
  185.          BNE cache_cmd
  186.  
  187.          LDR r1,chan
  188.          CMP r1,#0
  189.          BEQ single_cmd
  190.  
  191.          LDR r3,perpoll
  192.  
  193.          LDR r4,cmdtime
  194.          CMP r4,#0
  195.          SWINE OS_ReadMonotonicTime
  196.          ADDNE r4,r4,r0
  197.  
  198. do_next_chan
  199.          ADRL r2,oscmd
  200.  
  201. get_chan_cmd
  202.          SWI OS_BGet
  203.          BCS chan_eof
  204.          CMP r0,#32
  205.          MOVCC r0,#13
  206.          STRB r0,[r2],#1
  207.          CMP r0,#13
  208.          BNE get_chan_cmd
  209.  
  210.          ADRL r0,oscmd
  211.          LDR r2,os_params+20
  212.          CMP r2,#0
  213.          SWIEQ Wimp_StartTask
  214.          SWINE OS_CLI
  215.  
  216. repeat_chan
  217.          SUBS r3,r3,#1
  218.          BNE do_next_chan
  219.  
  220.          CMP r4,#0
  221.          BEQ wimp_loop
  222.          SWI OS_ReadMonotonicTime
  223.          CMP r0,r4
  224.          MOVCC r3,#1
  225.          BCC do_next_chan
  226.          B wimp_loop
  227.  
  228. chan_eof
  229.          LDR r0,os_params+12
  230.          CMP r0,#0
  231.          BEQ shutdown
  232.  
  233.          MOV r0,#1
  234.          MOV r2,#0
  235.          SWI OS_Args
  236.          B repeat_chan
  237.  
  238.  
  239. cache_cmd
  240.          LDR r5,cache_end
  241.          LDR r6,cache_ptr
  242.  
  243.          LDR r3,perpoll
  244.  
  245.          LDR r4,cmdtime
  246.          CMP r4,#0
  247.          SWINE OS_ReadMonotonicTime
  248.          ADDNE r4,r4,r0
  249.  
  250. do_next_cache
  251.          ADRL r2,oscmd
  252.  
  253. get_cache_cmd
  254.          CMP r6,r5
  255.          BEQ cache_eof
  256.          LDRB r0,[r6],#1
  257.          CMP r0,#32
  258.          MOVCC r0,#13
  259.          STRB r0,[r2],#1
  260.          CMP r0,#13
  261.          BNE get_cache_cmd
  262.  
  263.          ADRL r0,oscmd
  264.          LDR r2,os_params+20
  265.          CMP r2,#0
  266.          SWIEQ Wimp_StartTask
  267.          SWINE OS_CLI
  268.  
  269. repeat_cache
  270.          SUBS r3,r3,#1
  271.          BNE do_next_cache
  272.  
  273.          CMP r4,#0
  274.          STREQ r6,cache_ptr
  275.          BEQ wimp_loop
  276.          SWI OS_ReadMonotonicTime
  277.          CMP r0,r4
  278.          MOVCC r3,#1
  279.          BCC do_next_cache 
  280.          STR r6,cache_ptr
  281.          B wimp_loop
  282.  
  283. cache_eof
  284.          LDR r0,os_params+12
  285.          CMP r0,#0
  286.          BEQ shutdown
  287.  
  288.          ADRL r6,end
  289.          B repeat_cache
  290.  
  291.  
  292.  
  293. single_cmd
  294.          LDR r3,perpoll
  295.  
  296. do_single_again
  297.          ADRL r0,oscmd
  298.          LDR r1,os_params+20
  299.          CMP r1,#0
  300.          SWIEQ Wimp_StartTask
  301.          SWINE OS_CLI
  302.          SUBS r3,r3,#1
  303.          BNE do_single_again
  304.  
  305.          LDR r0,os_params+12
  306.          CMP r0,#0
  307.          BNE wimp_loop
  308.  
  309.  
  310. shutdown
  311.          LDR r1,chan
  312.          CMP r1,#0
  313.          MOVNE r0,#0
  314.          SWINE OS_Find
  315.          LDR r0,task_handle
  316.          LDR r1,task_id
  317.          SWI Wimp_CloseDown
  318.          SWI OS_Exit
  319.  
  320.  
  321. wimp_msg
  322.          LDR r0,[r1,#16]
  323.          CMP r0,#0
  324.          BNE wimp_loop
  325.          B shutdown
  326.  
  327.  
  328. task_handle     % 4
  329. chan            & 0
  330. pause           & 0
  331. cmdtime         & 0
  332. perpoll         & 1
  333. cache_ptr       & 0
  334. cache_end       & 0
  335. task_id         = "TASK"
  336. task_block      = "StartUp_"
  337.                 ALIGN
  338. task_block2     % &100
  339. os_cmd          % &100
  340. oscmd           % &100
  341. os_params       % &100
  342. os_template     = "/g,pause/e,perpoll/e,repeat/s,cmdtime/e,oscli/s,cache/s",13
  343.  
  344.                 ALIGN
  345.                 % &100
  346. stack
  347.  
  348. end
  349.                 END
  350.